package com.lkc.controller;

import com.lkc.service.OrdersService;
import com.lkc.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/orders/statistics")
@CrossOrigin
public class OrdersStatisticsController {

    // 自动注入订单服务
    @Autowired
    private OrdersService ordersService;

    /**
     * 获取最近7天的订单统计数据
     * 该接口会返回最近7天每天的订单数量，用于图表展示
     * @return Result对象，包含dates(日期列表)和counts(对应的订单数量列表)
     */
    @GetMapping("/recent")
    public Result getRecentOrdersStatistics() {
        try {
            // 初始化日期列表和订单数量列表
            List<String> dates = new ArrayList<>();
            List<Integer> orderCounts = new ArrayList<>();

            // 循环生成最近7天的日期数据（从6天前到今天）
            for (int i = 6; i >= 0; i--) {
                // 计算当前日期（今天减去i天）
                LocalDate date = LocalDate.now().minusDays(i);

                // 格式化日期为"MM-dd"格式（例如：12-01）
                String dateStr = date.format(DateTimeFormatter.ofPattern("MM-dd"));

                // 将格式化后的日期添加到日期列表
                dates.add(dateStr);

                // 调用服务层方法，查询该日期的订单数量
                int count = ordersService.getCountByDate(date);

                // 将订单数量添加到数量列表
                orderCounts.add(count);
            }

            // 构造返回结果
            Map<String, Object> result = new HashMap<>();
            // 添加日期列表
            result.put("dates", dates);
            // 添加订单数量列表
            result.put("counts", orderCounts);

            // 返回成功结果
            return Result.success(result);
        } catch (Exception e) {
            // 异常处理：打印错误堆栈
            e.printStackTrace();
            // 返回失败结果
            return Result.fail(500, "获取统计数据失败");
        }
    }
}